In [2]:
 import pandas as pd
In [5]:
data=pd.read_csv("customer_acquisition_cost_dataset.csv")
In [6]:
data
Out[6]:
Customer_ID Marketing_Channel Marketing_Spend New_Customers
0 CUST0001 Email Marketing 3489.027844 16
1 CUST0002 Online Ads 1107.865808 33
2 CUST0003 Social Media 2576.081025 44
3 CUST0004 Online Ads 3257.567932 32
4 CUST0005 Email Marketing 1108.408185 13
... ... ... ... ...
495 CUST0496 Email Marketing 1130.865147 19
496 CUST0497 Social Media 2482.119835 18
497 CUST0498 Online Ads 2773.532344 12
498 CUST0499 Social Media 4802.220679 28
499 CUST0500 Online Ads 4421.800773 40

500 rows × 4 columns

In [7]:
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500 entries, 0 to 499
Data columns (total 4 columns):
 #   Column             Non-Null Count  Dtype  
---  ------             --------------  -----  
 0   Customer_ID        500 non-null    object 
 1   Marketing_Channel  500 non-null    object 
 2   Marketing_Spend    500 non-null    float64
 3   New_Customers      500 non-null    int64  
dtypes: float64(1), int64(1), object(2)
memory usage: 15.8+ KB
In [8]:
data['CAC'] = data['Marketing_Spend'] / data['New_Customers']
In [9]:
fig1 = px.bar(data, x='Marketing_Channel', 
              y='CAC', title='CAC by Marketing Channel')
In [10]:
fig1.show()
In [11]:
fig2 = px.scatter(data, x='New_Customers', 
                  y='CAC', color='Marketing_Channel', 
                  title='New Customers vs. CAC', 
                  trendline='ols')
In [12]:
fig2.show()
In [13]:
summary_stats = data.groupby('Marketing_Channel')['CAC'].describe()
In [14]:
print(summary_stats)
                   count        mean        std        min        25%  \
Marketing_Channel                                                       
Email Marketing    124.0  132.913758  89.597107  23.491784  68.226195   
Online Ads         130.0  122.135938  79.543793  24.784414  62.207753   
Referral           128.0  119.892174  74.101916  22.012364  71.347939   
Social Media       118.0  126.181913  77.498788  21.616453  75.633389   

                          50%         75%         max  
Marketing_Channel                                      
Email Marketing    106.940622  177.441898  434.383446  
Online Ads          97.736027  163.469540  386.751285  
Referral            99.835688  137.577935  366.525209  
Social Media       102.620356  167.354709  435.487346  
In [15]:
data['Conversion_Rate'] = data['New_Customers'] / data['Marketing_Spend'] * 100
In [16]:
# Conversion Rates by Marketing Channel
In [17]:
fig = px.bar(data, x='Marketing_Channel', 
             y='Conversion_Rate', 
             title='Conversion Rates by Marketing Channel')
In [18]:
fig.show()
In [19]:
data['Break_Even_Customers'] = data['Marketing_Spend'] / data['CAC']
In [20]:
fig = px.bar(data, x='Marketing_Channel', 
             y='Break_Even_Customers', 
             title='Break-Even Customers by Marketing Channel')
In [21]:
fig.show()
In [22]:
fig = go.Figure()
In [23]:
# Actual Customers Acquired
In [24]:
fig.add_trace(go.Bar(x=data['Marketing_Channel'], y=data['New_Customers'],
                     name='Actual Customers Acquired', marker_color='royalblue'))
In [25]:
fig = go.Figure()
In [26]:
# Actual Customers Acquired
In [29]:
fig.add_trace(go.Bar(x=data['Marketing_Channel'], y=data['New_Customers'],
                     name='Actual Customers Acquired', marker_color='royalblue'))
In [30]:
# Break-Even Customers
In [31]:
fig.add_trace(go.Bar(x=data['Marketing_Channel'], y=data['Break_Even_Customers'],
                     name='Break-Even Customers', marker_color='lightcoral'))
In [32]:
# Update the layout
In [33]:
fig.update_layout(barmode='group', title='Actual vs. Break-Even Customers by Marketing Channel',
                  xaxis_title='Marketing Channel', yaxis_title='Number of Customers')
In [34]:
# Show the chart
In [35]:
fig.show()
In [ ]: